package com.example.mytest6;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import static android.content.ContentValues.TAG;

public class MyFragment4 extends Fragment {
    private BarChart bar_1;

    public MyFragment4() {
    }


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.myfragment4, container, false);
        initView(view);
        initData();
        return view;
    }

    private void initData() {
        //图表描述  右下角
        bar_1.setDescription(null);
        //禁止缩放
        bar_1.setScaleEnabled(false);
        //设置额外的偏移，将被添加到自动计算的偏移。 这不会改变自动计算的偏移量，但增加了额外的空间给它们。
        bar_1.setExtraOffsets(20, 0, 20, 20);

        //图例   形状和文字 大小   及位置
        Legend legend = bar_1.getLegend();
        legend.setFormSize(14);
        legend.setFormSize(14);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        legend.setDrawInside(true);
        //数据载入
        //Entry  数据类型
        ArrayList<BarEntry> yV1 = new ArrayList<>();
        yV1.add(new BarEntry(0, 370));
        yV1.add(new BarEntry(1, 1100));
        yV1.add(new BarEntry(2, 880));
        yV1.add(new BarEntry(3, 700));
        yV1.add(new BarEntry(4, 220));

        final ArrayList<BarEntry> yV2 = new ArrayList<>();
        yV2.add(new BarEntry(0, 230));
        yV2.add(new BarEntry(1, 500));
        yV2.add(new BarEntry(2, 460));
        yV2.add(new BarEntry(3, 440));
        yV2.add(new BarEntry(4, 180));

        //dataSet1         数据线   颜色和值填入
        //yV1实际上是总人数
        //  但是vY1 的优先级比  vY2 低   ，所以显示时只显示未被vY2覆盖的部分    因为先加入vY1再加入vY2
        //这部分就是有违章人数      即违章人数实际上是为 vy1-vy2
        BarDataSet dataSet1 = new BarDataSet(yV1, "有违章");
        dataSet1.setColor(0xFFEA7208);
        //高亮设置
        dataSet1.setHighlightEnabled(false);
        // setValueTextColor(int color) : 设置 DataSet1 数据对象包含的数据的值文本的颜色.
        // setValueTextSize(float size) : 设置 DataSets1 数据对象包含的数据的值文本的大小（单位是dp）
        dataSet1.setValueTextColor(Color.RED);
        dataSet1.setValueTextSize(14);
        //数据格式化
        dataSet1.setValueFormatter(new MyDataFormatter(yV2));


        BarDataSet dataSet2 = new BarDataSet(yV2, "无违章");
        dataSet2.setColor(0xFF6A9701);
        dataSet2.setHighlightEnabled(false);
        //setDrawValues(boolean enabled) : 启用/禁用 绘制所有 DataSet2 数据对象包含的数据的值文本。
        dataSet2.setDrawValues(false);


        //Y坐标轴右轴关闭    设置左轴  标签数 最小最大值  y标签均匀分布 字体大小
        bar_1.getAxisRight().setEnabled(false);
        YAxis yAxis = bar_1.getAxisLeft();
        yAxis.setLabelCount(7, true);
        yAxis.setAxisMinimum(0);
        yAxis.setAxisMaximum(1200);
        yAxis.setGranularity(1);
        yAxis.setTextSize(14);


        //X轴   得到x轴   设置位置   网格线  字体大小  x标签均匀分布   字体加粗
        XAxis xAxis = bar_1.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setTextSize(14);
        xAxis.setGranularity(1);
        xAxis.setTypeface(Typeface.DEFAULT_BOLD);

        //X轴数据格式化
        xAxis.setValueFormatter(new MyXAxisBarFormatter());

        //放的是两个Entry数据
        List<IBarDataSet> list = new ArrayList<>();
        list.add(dataSet1);
        list.add(dataSet2);


        BarData data = new BarData(list);
        //数据宽度
        data.setBarWidth(0.5f);
        bar_1.setData(data);


    }

    class MyXAxisBarFormatter extends ValueFormatter {
        @Override
        public String getFormattedValue(float value) {
            return 9 - (int) value + "0后";
        }
    }

    class MyDataFormatter extends ValueFormatter {
        ArrayList<BarEntry> yV2 = new ArrayList<>();

        public MyDataFormatter(ArrayList<BarEntry> yV2) {
            this.yV2 = yV2;
        }

        @Override
        public String getBarLabel(BarEntry barEntry) {
            return new DecimalFormat("0.00%").format((barEntry.getY() - yV2.get((int) barEntry.getX()).getY()) / barEntry.getY());
        }
    }

    private void initView(View view) {
        bar_1 = view.findViewById(R.id.bar_1);
    }


}
